perm filename ARMFN[SYS,HE]4 blob
sn#019461 filedate 1973-01-12 generic text, type T, neo UTF8
00100 HOPEN: ;OPENS THE HAND TO SET POINT
00200 TRNN HCL
00300 JRST[ MOVEI TAC,=480 ;GO HERE FIRST TIME
00400 MOVEM TAC,HCNT ;MAX TIME TO SERVO THERE
00500 ADDI TAC,=60
00600 MOVEM TAC,COUNT
00700 HRLZ AC,@STKPTR ;REQUIRED OPENING
00800 MOVE MQ,[3.7]
00900 CAML AC,MQ
01000 MOVE AC,MQ ;NOT GREATER THAN 2.5
01100 MOVEM AC,RSET ;REQUIRED FINAL SET POINT
01200 PUSHJ P,HEAD ;READS THE HAND
01300 MOVE AC,HAND ;AND STORE IT HERE
01400 MOVEM AC,SET ;DYNAMIC SET POINT
01500 TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
01600 MOVE TAC,[0.06]
01700 CAML AC,RSET
01800 MOVN TAC,TAC
01900 MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
02000 TRO HCL ;SO THAT WE DON'T COME BACK HERE
02100 JUMPGE TAC,NXTJIF
02200 FSC TAC,-1 ;IF CLOSING GO SLOWER
02300 MOVEM TAC,DIR
02400 SKIPE SOTCH ;AND RESTORE TOUCH
02500 TRO STCH
02600 JRST NXTJIF]
02700 HSU: PUSHJ P, HEAD ;INCREMENTS SETPOINT AND SETS D/A
02800 ;LEAVES ARM DATAO IN TAC
02900 IFE HANDWORK <
03000 JRST NEXT
03100 >
03200 SOSGE HCNT
03300 JRST[ MOVEI AC,HTERR
03400 MOVEM AC,TRAJER
03500 POP P,AC
03600 JRST TOFF]
03700 SKIPE DIR
03800 JRST DAW ;IF NOT AT FINAL SET DRIVE ANYWAY
03900 MOVE AC,RSET
04000 FSBR AC,HAND ;CHECK ERROR TOLERANCE
04100 MOVM AC,AC
04200 FSBR AC,[0.05]
04300 JUMPLE AC,[ TRZ HCL
04400 TDZ DATWD,HANDAT
04500 JRST NEXT]
04600 DAW:
04700 IFN TRACK,<SKIPN WALK>
04800 DATAO ARM,DATWD ;DRIVE HAND
04900 JRST NXTJIF
05000
00100 HCLOSE:
00200 TRNN HCL ;ONLY ONCE
00300 JRST[ TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
00400 MOVEI TAC,=240
00500 MOVEM TAC,COUNT
00600 HRLZ AC,@STKPTR ;MINIMUN OPENING
00700 MOVEM AC,MINDST
00800 PUSHJ P,HEAD ;READ HAND
00900 MOVE AC,HAND
01000 MOVEM AC,SET
01100 MOVE TAC,[-0.10]
01200 MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
01300 MOVSI AC,(4.0)
01400 MOVNM AC,RSET ;FINAL SET POINT -1 SO AS TO SQUEEZE
01500 TRO HCL
01600 JRST NXTJIF]
01700 BB: PUSHJ P,HEAD
01800 IFE HANDWORK <
01900 JRST ER2
02000 >
02100 IFN TRACK,<SKIPN WALK>
02200 DATAO ARM,DATWD ;DRIVE HAND
02300 MOVE AC,HERR
02400 CAMG AC,[0.50]
02500 JRST NXTJIF ;IF ERROR LESS THAN 1 KEEP ON
02600 ER2: TRZ HCL
02700 TDZ DATWD,HANDAT
02800 SKIPE SOTCH ;RESTORE TOUCH
02900 TRO STCH
03000 MOVE AC,MINDST
03100 IFE USER,<CAMG AC,HAND>
03200 JRST NEXT
03300 MOVEI 1,GRASER ;IF LESS THAN MINOPENING GIVE ERROR
03400 MOVEM 1,TRAJER
03500 POP P,1
03600 JRST TOFF
03700
00100 HEAD: MOVEI K,HANDCHA
00200 IFE USER,<
00300 PUSHJ P,PREAD ;READ HAND CHANNEL
00400 LDB AC,SNUM
00500 ANDI DACVAL,7777
00600 ADDI AC,(DACVAL) ;ADD ALL THREE READINGS TOGETHER
00700 FSC AC,220
00800 FMPR AC,HSCALE
00900 FADR AC,HOFF
01000 MOVEM AC,HAND ;OPENING IN INCHES
01100 >
01200 IFN USER,<
01300 MOVE AC,HAND
01400 FADR AC,DIR
01500 SKIPG AC
01600 SETZ AC,
01700 MOVEM AC,HAND
01800 >
01900 IFN REPORT,<
02000 PUSH DATA,[<SIXBIT/HAND/>+1]
02100 PUSH DATA,HAND
02200 >
02300 SKIPN TAC,DIR
02400 JRST[ MOVE TAC,SET
02500 JRST GOTHER]
02600 FMPR TAC,TDF
02700 FADRB TAC,SET ;INCREMENT SET POINT
02800 FSBR TAC,RSET ;NEGATIVE REMAINS TO GO
02900 FMPR TAC,DIR
03000 JUMPGE TAC,[ MOVE TAC,RSET ;GOT THERE
03100 MOVEM TAC,SET
03200 SETZM DIR
03300 JRST GOTHER]
03400 MOVE TAC,SET
00100 GOTHER: FSBR AC,TAC ;HAND SERVO
00200 EXCH AC,HERR
00300 FSBR AC,HERR
00400 FMPR AC,KVH
00500 MOVN TAC,HERR
00600 FMPR TAC,KEH
00700 FADR AC,TAC
00800 TDO DATWD,[HANDAT:XWD 4000,60]
00900 JUMPGE AC,.+2
01000 TRZ DATWD,40
01100 MOVM AC,AC
01200 FIX AC,211000
01300 CAILE AC,776000
01400 MOVEI AC,776000
01500 TRC AC,400000
01600 HRLI AC,6
01700 IFN DEB<
01800 MOVEM AC,HANDAW
01900 >
02000 IFN TRACK,<SKIPN WALK>
02100 DATAO WIDTH,AC
02200 POPJ P,
02300 HSCALE: 1.32
02400 HOFF: -0.81
02500 DIR: 0 ;CHANGE OF SETPOINT PER JIFFY
02600 SET: 0 ;DYNAMIC SET POINT
02700 RSET: 0 ;FINAL SET POINT
02800 MINDST: 0 ;MIN OPENING FOR CLOSE
02900 HERR: 0 ;HAND POSITION ERROR
03000 KEH: 5.0 ;ERROR GAIN
03100 KVH: 10.0 ;VELOCITY GAIN
03200 IFN DEB<
03300 HANDAW: 0
03400 >
03500
00100 PLACE: ;PLACE HAND ON TABLE
00200 TRNN DROP ;ONLY COME HERE ONCE
00300 JRST[ TRO DROP+RUN+VZERO
00400 MOVEI 1,=180
00500 MOVEM 1,COUNT
00600 HRRE 1,@STKPTR
00700 ADDI 1,(CBUF)
00800 HRLI 1,(1)
00900 HRRI 1,DELTH
01000 BLT 1,DELTH+5 ;CHANGE OF THETA PER JIFFY
01100 MOVEI 1,=12
01200 MOVEM 1,HCNT ;DON'T STOP FOR THE FIRST 12 JIFFIES
01300 MOVE DATWD,[770000252502]
01400 HRRZM DATWD,FBI
01500 JRST NXTJIF]
01600 SOSL HCNT
01700 JRST NXTJIF
01800 IFN USER,<JRST PLACED>
01900 EXL: MOVE AC,ET0+1
02000 FADR AC,ET0P+1
02100 MOVM AC,AC ;AVERAGE OF LAST TWO JOINT 2 ERRORS
02200 CAML AC,PLER
02300 JRST PLACED
02400 JRST NXTJIF
02500 PLACED: JRST RUDONE
02600 PLER: 1.5
02700
00100 NUDGE: HRRE 1,@STKPTR ;DIFFERENTIAL CHANGE IN POSITION
00200 ADDI 1,(CBUF)
00300 HRLI 1,(1)
00400 HRRI 1,DELTH
00500 BLT 1,DELTH+5 ;CHANGE AND NUMBER OF TICKS TO DO IT
00600 HRRE 1,@STKPTR
00700 ADDI 1,6(CBUF)
00800 MOVE DATWD,14(1)
00900 HRRZM DATWD,FBI
01000 MOVE 2,15(1)
01100 IMULI 2,=16667
01200 MOVEM 2,NTICKS
01300 ADDI 2,=60
01400 MOVEM 2,COUNT
01500 HRLI 1,(1)
01600 HRRI 1,CI
01700 BLT 1,CII+5
01800 MOVEI I,5
01900 NCCA: MOVE AC,MOTARM(I)
02000 FADRM AC,CII(I)
02100 SOJGE I,NCCA
02200 TRO INCREM+RUN+VZERO+NUL
02300 SETZM TICKS
02400 SETZM FUNCT
02500 MOVEI I,5
02600 SGL: TDNE DATWD,BMASK(I)
02700 TDO DATWD,BMASK(I)
02800 SOJGE I,SGL
02900 JRST NXTJIF
03000
03100
03200 STOP: HRRE 1,@STKPTR
03300 ADDI 1,(CBUF)
03400 HRLI 1,(1)
03500 HRRI 1,STQ
03600 BLT 1,STQ+5
03700 MOVEI I,5
03800 SETZ AC,
03900 DSTQ: MOVE TAC,STQ(I)
04000 FDVR TAC,F0(I)
04100 MOVM MQ,TAC
04200 CAMGE MQ,[0.2]
04300 SETZB TAC,STQ(I)
04400 MOVEM TAC,STQ(I)
04500 FMPR TAC,TAC
04600 FADR AC,TAC
04700 SOJGE I,DSTQ
04800 MOVEM AC,SDTQ
04900 SETZM ASTPP
05000 TRO STP
05100 JRST NEXT
05200
00100 SAVE: HRRE K,@STKPTR
00200 ADDI K,(CBUF)
00300 MOVE TAC,(K)
00400 JUMPLE TAC,.+2
00500 CAILE TAC,12
00600 JRST[ MOVEI TAC,SAVERR
00700 MOVEM TAC,TRAJER
00800 JRST TOFF]
00900 IMULI TAC,3
01000 ADDI TAC,DTHS
01100 MOVEI J,2
01200 SAL1: MOVEI I,5
01300 SOJ TAC,
01400 SETZ AC,
01500 SAL2: AOJ K,
01600 MOVE MQ,DTH(I)
01700 FMPR MQ,(K)
01800 FADR AC,MQ
01900 SOJGE I,SAL2
02000 MOVEM AC,(TAC)
02100 SOJGE J,SAL1
02200 JRST NEXT
02300
02400 RESTORE:HRRE K,@STKPTR
02500 ADDI K,(CBUF)
02600 MOVE TAC,(K)
02700 JUMPLE TAC,.+2
02800 CAILE TAC,12
02900 JRST[ MOVEI TAC,SAVERR
03000 MOVEM TAC,TRAJER
03100 JRST TOFF]
03200 IMULI TAC,3
03300 ADDI TAC,DTHS-1
03400 ADDI K,22
03500 MOVEI I,5
03600 REL1: MOVE AC,(TAC)
03700 FMPR AC,(K)
03800 MOVE MQ,-1(TAC)
03900 FMPR MQ,-1(K)
04000 FADR AC,MQ
04100 MOVE MQ,-2(TAC)
04200 FMPR MQ,-2(K)
04300 FADR AC,MQ
04400 FADRM AC,DELTH(I)
04500 SUBI K,3
04600 SOJGE I,REL1
04700 JRST NEXT
04800
04900
05000 SET.ARM:HRRE I,@STKPTR
05100 ADDI I,(CBUF)
05200 HRRE AC,(I)
05300 SOJL AC,.+2
05400 CAIL AC,11
05500 JRST[ MOVEI TAC,SAVERR
05600 MOVEM TAC,TRAJER
05700 JRST TOFF]
05800 IMULI AC,3
05900 HRRI TAC,DTHS(AC)
06000 HRRZI MQ,2(TAC)
06100 HRLI TAC,1(I)
06200 BLT TAC,(MQ)
06300 JRST NEXT
06400
06500 SLAVE: MOVEI K,15B23
06600 MOVEI I,3
06700 SLRP: PUSHJ P,PREAD
06800 LDB AC,SNUM
06900 SUBI AC,4000
07000 MOVEM AC,POT(I)
07100 SOJGE I,SLRP
07200 TRNN HCL
07300 JRST[ TRO RUN+VZERO
07400 MOVE DATWD,[770000252502]
07500 HRRZM DATWD,FBI
07600 TRO HCL
07700 MOVEI AC,=6000
07800 MOVEM AC,COUNT
07900 MOVEI I,3
08000 SLZL: MOVE AC,POT(I)
08100 MOVEM AC,POTZ(I)
08200 SOJGE I,SLZL
08300 JRST .+1]
08400 MOVEI I,3
08500 SLCH: MOVE AC,POT(I)
08600 SUB AC,POTZ(I)
08700 JUMPGE AC,[SUBI AC,400
08800 JUMPGE AC,SLST
08900 JRST SLZA]
09000 ADDI AC,400
09100 JUMPL AC,SLST
09200 SLZA: SETZ AC,
09300 SLST: FSC AC,213
09400 MOVEM AC,POT(I)
09500 SOJGE I,SLCH
09600 SKIPE POT+3
09700 JRST[ TRZ HCL
09710 TRO FINAL
09720 SETZM FUNCT
09800 JRST NXTJIF]
09900 HRRE K,@STKPTR
10000 ADDI K,21(CBUF)
10100 MOVEI I,5
10200 SLL2: MOVE AC,POT+2
10300 FMPR AC,(K)
10400 MOVE MQ,POT+1
10500 FMPR MQ,-1(K)
10600 FADR AC,MQ
10700 MOVE MQ,POT
10800 FMPR MQ,-2(K)
10900 FADR AC,MQ
11000 FMPR AC,TDF
11100 FADRM AC,DTH(I)
11200 SUBI K,3
11300 SOJGE I,SLL2
11400 JRST NXTJIF
11500 POT: BLOCK 4
11600 POTZ: BLOCK 4
11700
00100 CENTER: TRNN HCL
00200 JRST[ TRO HCL
00300 MOVEI TAC,=600
00400 MOVEM TAC,COUNT
00500 MOVSI AC,(4.0)
00600 MOVNM AC,RSET
00700 PUSHJ P,HEAD
00800 MOVE AC,SET
00900 TRZ STCH
01000 MOVE TAC,[-0.02]
01100 MOVEM TAC,DIR
01200 JRST NXTJIF]
01300 PUSHJ P,HEAD
01400 IFE HANDWORK,<JRST ER2>
01500 DATAO ARM,DATWD
01600 TRNN DROP
01700 JRST[ MOVEI I,1
01800 CFT: MOVE AC,OBS(I)
01900 JUMPG AC,[SETZM TOT
02000 SKIPN I
02100 AOS TOT
02200 TRO DROP+RUN+VZERO
02300 MOVE TAC,[-0.01]
02400 MOVEM TAC,DIR
02500 HRRE TAC,@STKPTR
02600 ADDI TAC,(CBUF)
02700 MOVE AC,(TAC)
02800 MOVEM AC,MINDST
02900 AOJ TAC,
03000 MOVEI I,DELTH
03100 OT: MOVE AC,(TAC)
03200 FMPR AC,[0.005]
03300 SKIPN TOT
03400 MOVNS AC
03500 MOVEM AC,(I)
03600 AOJ TAC,
03700 CAIGE I,DELTH+5
03800 AOJA I,OT
03900 MOVE TAC,[XWD 770000, 252500]
04000 HRRZM TAC,FBI
04100 IOR DATWD,TAC
04200 MOVSI AC,(1.0)
04300 MOVEM AC,TDF
04400 MOVEI I,4
04500 GETGO: PUSHJ P,NXTH
04600 SOJGE I,GETGO
04700 JRST NXTJIF]
04800 SOJGE I,CFT
04900 JRST NXTJIF]
05000 MOVE TAC,TOT
05100 SKIPG OBS(TAC)
05200 JRST NXTJIF
05300 TRZ DROP+RUN+FINAL
05400 PUSHJ P,SETSET
05500 TDZ DATWD,[XWD 770000,252500]
05600 MOVE TAC,DIR
05700 FSC TAC,3
05800 MOVEM TAC,DIR
05900 MOVEI TAC,2
06000 MOVEM TAC,FUNCT
06100 JRST NXTJIF]
06200 TOT: 0
06300
06400 WOBBLE: HRLZ AC,@STKPTR
06500 MOVEM AC,WOBMAG
06600 MOVEI AC,1
06700 MOVEM AC,WOBCNT+2
06800 MOVEM AC,WOBCNT+1
06900 MOVEI AC,6
07000 MOVEM AC,WOBCNT
07100 MOVN AC,WOBMAG
07200 FADRM AC,DTH+3
07300 TRO WOB
07400 JRST NEXT
07500 WOBMAG: 0
07600 WOBCNT: BLOCK 3
07700 SIN: 0.0
07800 0.30902
07900 0.58779
08000 0.80902
08100 0.95106
08200 1.0
08300 0.95106
08400 0.80902
08500 0.58779
08600 0.30902
08700 0.0
08800 -0.30902
08900 -0.58779
09000 -0.80902
09100 -0.95106
09200 -1.0
09300 -0.95106
09400 -0.80902
09500 -0.58779
09600 -0.30902
00100 SEARCH: SETZM XSEL
00200 SETZM SCOUNT
00300 SETZM TCOUNT
00400 HRRE 1,@STKPTR
00500 ADDI 1,(CBUF)
00600 HRLI 1,(1)
00700 HRRI 1,XDEL
00800 BLT 1,YDEL+5
00900 SETZM SDTH
01000 MOVE AC,[XWD SDTH,SDTH+1]
01100 BLT AC,SDTH+5
01200 JRST NEXT
01300
01400 AOJI: MOVEI I,5
01500 MOVE K,SCOUNT
01600 SOSG J,TCOUNT
01700 JRST[ SKIPN XSEL
01800 AOS K,SCOUNT
01900 SETCMM XSEL
02000 MOVEI J,(K)
02100 MOVEM J,TCOUNT
02200 JRST .+1]
02300 SKIPE XSEL
02400 JRST[IX:MOVE AC,XDEL(I)
02500 TRNN K,1
02600 MOVN AC,AC
02700 FADRB AC,SDTH(I)
02800 FADRM AC,DELTH(I)
02900 SOJGE I,IX
03000 JRST NJ]
03100 IY: MOVE AC,YDEL(I)
03200 TRNN K,1
03300 MOVN AC,AC
03400 FADRB AC,SDTH(I)
03500 FADRM AC,DELTH(I)
03600 SOJGE I,IY
03700 NJ: HRRE TAC,@STKPTR
03800 ADD TAC,STKPTR
03900 SOJ TAC,
04000 HRRM TAC,STKPTR
04100 JRST NEXT
04200
04300 TCOUNT: 0
04400 SCOUNT: 0
04500 XSEL: 0
04600 XDEL: BLOCK 6
04700 YDEL: BLOCK 6
04800 SDTH: BLOCK 6
04900
00100 REFLEX: MOVEI I,1
00200 MOVEI K,65B23
00300 IFN USER,<POPJ P,>
00400 REX: PUSHJ P,PREAD
00500 LDB AC,[POINT 12,DACVAL,11]
00600 ADD AC,REF(I)
00700 MOVEM AC,OBS(I)
00800 RMOR: SOJGE I,REX
00900 TRNN STCH
01000 POPJ P,
01100 MOVEI I,1
01200 SIT: MOVE AC,OBS(I)
01300 JUMPG AC,[ LSH I,3
01400 IORI I,TOUCH
01500 MOVEM I,TRAJER
01600 POP P,I
01700 JRST TOFF]
01800 SOJGE I,SIT
01900 POPJ P,
02000
02100 REF: -1000
02200 -1000
02300 BLOCK 4
02400 OBS: BLOCK 2
02500 SOTCHS: 0
02600
02700 SETCH: MOVE AC,SOTCH
02800 MOVEM AC,SOTCHS
02900 HRLE AC,@STKPTR
03000 MOVEM AC,SOTCH
03100 JUMPE AC,NEXT
03200 TRO STCH
03300 JRST NEXT
03400
00100 XLIST
00200 LIT
00300 LIST
00400 END START